// 封装 uni.request 请求
// 注意：请确保此地址指向正确的后端服务地址
const BASE_URL = 'http://localhost:6009/order-client' // 订单服务基础URL
const SYS_USER_BASE_URL = 'http://localhost:6005/sys-client' // 用户服务基础URL
const USER_BASE_URL = 'http://localhost:6006/user-client' // 客户服务基础URL
const PRODUCT_BASE_URL = 'http://localhost:6004/product-client' // 商品服务基础URL

// 请求封装
const request = (options) => {
  return new Promise((resolve, reject) => {
    // 根据URL判断使用哪个基础URL
    let baseUrl = BASE_URL;
    if (options.url && options.url.includes('/api/sysUser')) {
      baseUrl = SYS_USER_BASE_URL;
    } else if (options.url && options.url.includes('/api/customerInfo')) {
      baseUrl = USER_BASE_URL;
    } else if (options.url && (options.url.includes('/api/productInfo') || options.url.includes('/api/productCategory'))) {
      baseUrl = PRODUCT_BASE_URL;
    }
    
    // 添加时间戳避免缓存
    const urlWithTimestamp = baseUrl + options.url + (options.url.includes('?') ? '&' : '?') + '_t=' + Date.now();
    
    uni.request({
      url: urlWithTimestamp,
      method: options.method || 'GET',
      data: options.data || {},
      header: {
        'Content-Type': 'application/json',
        'Accept': 'application/json',
        ...options.header
      },
      success: (res) => {
        console.log('请求成功，URL:', urlWithTimestamp, '响应:', res);
        // 根据后端返回的状态码判断请求是否成功
        if (res.statusCode === 200) {
          // 检查返回的数据格式
          if (res.data && typeof res.data === 'object') {
            resolve(res.data)
          } else {
            console.error('返回数据格式不正确:', res.data);
            reject(new Error('返回数据格式不正确'))
          }
        } else {
          console.error('请求失败，状态码:', res.statusCode, 'URL:', urlWithTimestamp, '响应:', res);
          // 可以根据需要处理不同的错误状态码
          reject(new Error(`请求失败，状态码: ${res.statusCode}`))
        }
      },
      fail: (err) => {
        console.error('网络请求失败:', err, 'URL:', urlWithTimestamp);
        uni.showToast({
          title: '网络请求失败，请检查网络连接',
          icon: 'none',
          duration: 2000
        })
        reject(err)
      }
    })
  })
}

// 封装常用的请求方法
const api = {
  get(url, data, options = {}) {
    return request({
      url,
      method: 'GET',
      data,
      ...options
    })
  },
  
  post(url, data, options = {}) {
    return request({
      url,
      method: 'POST',
      data,
      ...options
    })
  },
  
  put(url, data, options = {}) {
    return request({
      url,
      method: 'PUT',
      data,
      ...options
    })
  },
  
  delete(url, data, options = {}) {
    return request({
      url,
      method: 'DELETE',
      data,
      ...options
    })
  }
}

export default api